package com.sixdog.regulate.ctl;

import com.sixdog.regulate.constant.JFrameItem;
import com.sixdog.regulate.exception.NoSuchItemException;
import lombok.Data;
import org.springframework.stereotype.Component;

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.plaf.LabelUI;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.HashMap;
import java.util.Map;

// 窗口控制层,用于管理窗口中的空间
@SuppressWarnings("all")
@Component
@Data
public class JFrameCtl {

    // 用来存放菜单栏
    private final Map<String, JMenuBar> menuBar = new HashMap<String, JMenuBar>();

    // 用来存放各种菜单
    private final Map<String, JMenu> menus = new HashMap<String, JMenu>();

    // 用来存放菜单中的各种菜单项
    private final Map<String, JMenuItem> menuItems = new HashMap<String, JMenuItem>();

    // 用来存放各种面板
    private final Map<String, JPanel> panels = new HashMap<String, JPanel>();

    // 用来存放各种Label
    private final Map<String, JLabel> labels = new HashMap<String, JLabel>();

    // 用来存放其他元素
    private final Map<String, Object> others = new HashMap<String, Object>();

    public JFrameCtl(){
        // 初始化显示设备列表的数据，用来存放设备的序列号信息
        JList<String> serialNo = new JList<String>();


        // 初始化滚动框，来存放JList列表
        JScrollPane deviceListPane = new JScrollPane();
        deviceListPane.setSize(200,500);

        // 将显示设备列表的数据添加到滚动框中
        deviceListPane.setViewportView(serialNo);

        // 将滚动框添加到other集合中
        others.put(JFrameItem.JFrameItemName.DEVICE_LIST_PANE.getName(),deviceListPane);
        // 将序列号信息添加到others集合中
        others.put(JFrameItem.JFrameItemName.SERIAL_NO_LIST.getName(),serialNo);
    }

    // 为菜单添加菜单选项
    public void addMenuItemForMenu(String menuName, JMenuItem item){
        JMenu jMenu = menus.get(menuName);
        if(jMenu == null){
            throw new NoSuchItemException("未找到名称为:" + menuName + "的菜单");
        }
        jMenu.add(item);
    }

    // 为JList列表绑定事件，即点击设备序列号时出发事件
    public void addListenerForJList(){
        JList<String> list = (JList<String>) this.others.get(JFrameItem.JFrameItemName.SERIAL_NO_LIST.getName());
        list.addListSelectionListener(listener -> {
            // 这里需要进行判断，如果getValueIsAdjusting为true，表示鼠标按下了一次，为false表示鼠标被释放了，这里只需要按下时进行操作。
            if(listener.getValueIsAdjusting()){
                //System.out.println("被单击了");
                //System.out.println("选中的值为:" + list.getSelectedValue());
                JLabel jLabel = labels.get(JFrameItem.JFrameItemName.RIGHT_LABEL.getName());
                jLabel.setText(new StringBuilder().append("被选择的序列号是:").append(list.getSelectedValue()).toString());



            }
        });
    }
}
